import React from 'react'
import { useDrag } from 'react-dnd'

export function Home() {
  // 第一个返回值是一个对象，主要放一些拖拽物的状态。后面会介绍，先不管
  // 第二个返回值：顾名思义就是一个Ref，只要将它注入到DOM中，该DOM就会变成一个可拖拽的DOM
  const [_, dragRef] = useDrag({
      type: 'Player', // 给拖拽物命名，后面用于分辨该拖拽物是谁，支持string和symbol
      item: { id:1  }, // 拖拽物所携带的数据，让后面一些事件可以拿到数据，已达到交互的目的
    },[])

  // 由上面示例可知, useDrag所接收的参数一个是对象/函数 和一个依赖数组（可选）

  // 注入Ref,现在这个DOM就可以拖拽了
  return (
    <div ref={dragRef}></div>
  )
}

import { useDrop } from 'react-dnd'

export const Dustbin = () => {
  const [_, dropRef] = useDrop({
    accept: ['Player'],  // 指明该区域允许接收的拖放物。可以是单个，也可以是数组
    // 里面的值就是useDrag所定义的type
    
    // 当拖拽物在这个拖放区域放下时触发,这个item就是拖拽物的item（拖拽物携带的数据）
    drop: (item) => {},
  })

  // 将ref注入进去，这个DOM就可以处理拖拽物了
  return (
    <div ref={dropRef} ></div>
  )
}

const Player=({onChangePosition,id})=>{
	const ref = useRef(null);

	// 1. 让DOM作为拖拽物，允许拖放
	const [_, drag] = useDrag(() => ({
	  type: 'PLAYER', 
	  item: { id：1 }  
	}));

	// 2. 让DOM作为可拖放的区域
	const [, drop] = useDrop(() => ({
	  accept: ['PLAYER'],  
	  drop(item) {
		 if (onChangePosition) {
			onChangePosition(item.id,id);
		 }
	  }
	}));

	// 3. 让目标DOM即能作为拖拽物，也能作为拖放区域
	drag(drop(ref));

	// 4. 下面就是施展魔法，把ref注入DOM中
	return <div ref={ref}></div>
}